<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 父构造函数
      function Father(name, age) {
        // this指向父构造函数的对象实例
        this.name = name;
        this.age = age;
      }
      Father.prototype.money = function () {
        console.log(100);
      };
      // 子构造函数
      function Son(name, age, score) {
        // this 指向子构造函数的对象实例
        Father.call(this, name, age); // 调用父构造函数 把父构造函数的this指向 修改为子构造函数的this
        this.score = score;
      }
      //   Son.prototype = Father.prototype; 修改子原型对象 父原型对象会一起变化
      Son.prototype = new Father(); // 会把Son里面的constructor修改为了new Father() 手动修改回来的构造函数
      Son.prototype.constructor = Son;
      // 子构造函数的方法
      Son.prototype.exam = function () {
        console.log("考试");
      };
      var son = new Son("李白", 18, 100);
      console.log(son);
      console.log(Father.prototype);
      console.log(Son.prototype.constructor);
    </script>
  </body>
</html>
